package my.sort.cmp;

import my.sort.Sort;

/**
 * 冒泡排序: 优化 - 标记该数组在这一趟冒泡排序中是否有序
 *
 * @author AJun
 * @date 2020/9/15
 */
public class BubbleSort2<T extends Comparable<T>> extends Sort<T> {

    @Override
    protected void sort() {
        int len = array.length;
        for (int end = len - 1; end > 0; end--) {
            boolean sorted = true; // 标记该数组在这一趟冒泡排序中是否有序
            for (int begin = 1; begin <= end; begin++) {
                if (cmp(begin, begin - 1) < 0) {
                    swap(begin, begin - 1);
                    sorted = false; // 交换了顺序说明无序
                }
            }

            // 如果有序则提前结束循环
            if (sorted) {
                break;
            }
        }
    }

}
